package cn.hy.机考.part04;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * @author hy
 * 三十二、组成最大数
 * 将卡片连起来可以组成多种数字，计算组成的最大数字。
 * 22,221
 * 输出:22221
 * 4589,101,41425,9999
 * 输出:9999458941425101
 */
public class Demo32 {


    /**
     * 本质上是一种排序，但是排序规则如何定义？
     *
     * 对于22,221 可以组成22221 和22122 显然22221更大应该排在前面
     * 对于5 51 可以组成551 和 515 显然551更大应该排在前面
     * 所以在比较两个数大小的规则应该将两个数链接起来后再比较大小
     * 对于两个字符串：left、right
     * 我们应该比较：leftAndRight 和rightAndLeft 的大小
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String[] str = sc.nextLine().split(",");
            Comparator<String> myComparator = (left, right) -> {
                String leftAndRight = left + right;
                String rightAndLeft = right + left;
                return rightAndLeft.compareTo(leftAndRight); // 逆序
            };
            String collect = Arrays.stream(str).sorted(myComparator).collect(
                    Collectors.joining(""));
            System.out.println(collect);
        }
    }
}
